package com.hxzon.aixzsecretary.mail;

import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;

/**
 * 
 * @author hxzon
 */
public class SendMail {
	private String host = ""; // smtp服务器
	private String user = ""; // 用户名
	private String password = ""; // 密码

	private String from = ""; // 发件人地址
	private String to = ""; // 收件人地址
	private String subject = ""; // 邮件标题

	private String contentText = "";// 邮件正文文本内容
	private String affix = ""; // 附件地址
	private String affixName = ""; // 附件名称

	/** Creates a new instance of AixzSendMail */
	public void setHeader(String from, String to, String subject) {
		this.from = from;
		this.to = to;
		this.subject = subject;
	}

	public void setAffix(String affix, String affixName) {
		this.affix = affix;
		this.affixName = affixName;
	}

	public void setContentText(String contentText) {
		this.contentText = contentText;
	}

	public void setUser(String host, String user, String password) {
		this.host = host;
		this.user = user;
		this.password = password;
	}

	public void send() {
		Properties props = new Properties();
		// 设置发送邮件的邮件服务器的属性
		props.put("mail.smtp.host", host);
		// 需要经过授权，这样才能通过验证
		props.put("mail.smtp.auth", "true");

		// 用刚刚设置好的props对象构建一个session
		Session session = Session.getDefaultInstance(props);

		// 有了这句便可以在发送邮件的过程中在console处显示过程信息，供调试使用
		// （你可以在控制台（console)上看到发送邮件的过程）
		session.setDebug(true);

		// 用session为参数定义消息对象//hxz该类是使用MIME类型、MIME信息头的邮箱信息
		MimeMessage message = new MimeMessage(session);
		try {
			message.setFrom(new InternetAddress(from));
			message.addRecipient(Message.RecipientType.TO, new InternetAddress(
					to));
			message.setSubject(subject);

			// multipart对象中添加邮件的各个部分内容，包括文本和附件
			Multipart multipart = new MimeMultipart();

			// 文本部分
			BodyPart textPart = new MimeBodyPart();
			textPart.setText(contentText);// hxz
			multipart.addBodyPart(textPart);

			if (affixName != null && affix != null) {

				// 附件部分
				BodyPart affixPart = new MimeBodyPart();
				DataSource affixSource = new FileDataSource(affix);
				affixPart.setDataHandler(new DataHandler(affixSource));
				// 添加附件的标题
				// 这里很重要，通过下面的Base64编码的转换可以保证你的
				// 中文附件标题名在发送时不会变成乱码
				sun.misc.BASE64Encoder enc = new sun.misc.BASE64Encoder();
				affixPart.setFileName("=?GBK?B?"
						+ enc.encode(affixName.getBytes()) + "?=");
				// affixPart.setFileName(affixName);//中文标题变成了乱码
				multipart.addBodyPart(affixPart);
			}

			// 将multipart对象放到message中
			message.setContent(multipart);
			// 保存邮件
			message.saveChanges();

			Transport transport = session.getTransport("smtp");
			// 连接服务器的邮箱
			transport.connect(host, user, password);
			// 把邮件发送出去
			transport.sendMessage(message, message.getAllRecipients());
			transport.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}